#logging
'''
应用场景：根据场景需求，按要求打印不同的信息类型：
可以打印出使用的模块、代码运行的时候。

logging模块可以：
1.控制信息层级，仅记录需要的信息
2.控制显示或者保存日志时间
3.使用内置信息模板控制日志格式
4.知晓信息来源于哪个模块

'''
#日志的作用
'''
1.程序调试
2.了解软件程序运行，是否正常
3.软件程序运行故障分析与问题定位


日志等级：（严重程度由轻到重）
DEBUG       调试信息
INFO        普通信息
WARNING     警告信息  发生意想不到的事情，可能会出现问题，程序还是能够继续运行
ERROR       错误信息  程序运行已经出现了一些问题，程序某些功能不能执行
CRITICAL    危险信息  严重的错误，导致程序无法继续运行。

'''

#logger 日志管理器配置步骤：
'''
1.初始化对象
2.设置级别
3.定义handler
4.格式化输出
'''
#一、基本配置

import logging
#1)创建exam1.log文件，并设置级别
logging.basicConfig(filename=r'C:\Users\sea_0\Desktop\silicon\exam1.log',level=logging.DEBUG)
#2)在exam1.log文件重写入debug调试信息
logging.debug('This is a debug') #写入调试信息
logging.info('This is a info')   #写入普通信息
logging.warning('This is a warning') #写入警告信息
print('====================================================')
print('\n')


#格式化输出
'''
%(levelname)s 日志记录的日志级别%(message)s 日志记录的文本内容
'''
import logging
#logging.basicConfig(format='日志级别：%(levelname)/s\n 日志内容：%(message)s',level=logging.DEBUG)

logging.basicConfig(format='日志时间：%(asctime)s \n'
                    '日志内容：%(message)s',
                    level=logging.DEBUG)
#写入日志信息内容
logging.debug('This is a debug')
logging.info('This is a info')
logging.warning('This is a warning')
print('====================================================')
print('\n')



#日志模块组件：
'''
日志器 Logger  提供应用程序调用的接口
处理器 Handler 将日志发送到指定的位置
过滤器 Filter  过滤日志信息
格式器 Formatter 格式化输出日志

'''
#如何配置日志管理器

import logging
#1.创建一个日志管理器，初始化/实例对象
logger = logging.getLogger()

#设置logger级别
logger.setLevel(logging.DEBUG)

#2.定义处理器Handler
#在控制台输出，StreamHandler
sh = logging.StreamHandler()

#达到什么级别在控制台输出
sh.setLevel(logging.DEBUG)

#写文件里面，FileHandler文件处理器
fh = logging.FileHandler('ftest2.log',encoding='utf-8')

#达到什么级别写入，设置日志记录级别
fh.setLevel(logging.WARNING)

#3.定义日志输出格式
formatter = logging.Formatter(
    '时间:%(asctime)s,'
    '日志级别:%(levelname)s'
    '日志信息:%(message)s'
)

#4.声明哪些处理器要以上述定义的格式进行输出
sh.setFormatter(formatter)
fh.setFormatter(formatter)

#5.将控制台处理器sh和文件处理器对象fh添加到logger重的Handler中去
logger.addHandler(sh)
logger.addHandler(fh)

#6.设置每个级别日志的内容
logging.debug('测试中')
logging.info('正常运行')
logging.warning('警告')
logging.error('错误')
logging.critical('严重错误')
